#ifndef JOLFS_VOLUME_H
#define JOLFS_VOLUME_H

#include <string>
#include <vector>

#include "entry.h"

namespace jolfs
{
  class Volume
  {
  public:
    Volume( const std::string& name );
    Volume( const Volume& );
    ~Volume();
    
  //============================================================================
  // COMMON
  //============================================================================
  public:
    const std::string& getName() const;
    
    void setName( const std::string& );
  
  //============================================================================
  // TO BE IMPLEMENTED BY SUBCLASSES
  //============================================================================
  public:
    virtual void addEntry( Entry* ) = 0;
    
    virtual EntryList    getEntries() const = 0;
    virtual Entry*       getRoot   ()       = 0;
    virtual const Entry* getRoot   () const = 0;
    virtual const Entry* getEntry( const std::string& path ) const = 0;
    virtual Entry*       getEntry( const std::string& path ) = 0;
    
  private:
    std::string name_;
  };
  
  typedef std::vector<Volume*> VolumeList;
} // namespace jolfs

#endif // JOLFS_VOLUME_H
